from typing import TypedDict
from ..baseapp import db
from .mdl_dev_env_app_cfgs import PROXY_TYPES


class DevEnvConfigDict(TypedDict):
    ports: dict
    volumes: list[str]
    networks: dict
    command: list[str]
    environment: dict


class ProxyConfigDict(TypedDict):
    type: PROXY_TYPES
    port: int
    sub_route: str


class DevEnvironment(db.Model):
    """
    开发环境，每一个开发环境下可能包含多个容器。
    """

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100))  # 容器所属的开发环境名称
    user_id = db.Column(db.Integer)  # 添加: 创建者用户名
    configs: DevEnvConfigDict = db.Column(
        db.JSON
    )  # 开发环境的配置信息，在不同环境之间都是共用的。
    proxy_configs: ProxyConfigDict = db.Column(
        db.JSON
    )  # 开发环境的配置信息，在不同环境之间都是共用的。
    ide_port: int = db.Column(db.Integer)  # 在线IDE的连接端口
    ide_type: str = db.Column(db.String(50))  # IDE类型，如：Code-Server等
    host_machine_id: int = db.Column(db.Integer)  # 所在的物理机ID
